/**
 * 
 */
package com.ai.service.cms.user.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.ai.common.exception.AlikAssert;
import com.ai.manager.edu.cms.user.MenuManager;
import com.ai.model.edu.cms.backoperator.Menu;
import com.ai.model.edu.cms.backoperator.vo.MenuVO;
import com.ai.service.cms.user.MenuService;

/**
 * Class Name : CityServiceImpl<br>
 * 
 * Description : 城市信息seriver接口实现类<br>
 * 
 * @author zhangdh
 * @version $Revision$
 * @see
 *
 */
@Service("menuService")
public class MenuServiceImpl implements MenuService {

    @Resource
    private MenuManager menuManager;

    /**
     * Description ： 新增菜单<br>
     * cyj
     * 
     * @return
     */
    @Override
    public int insert(Menu record) {
        List<MenuVO> vos = this.selectByMenuCode(record.getMenuCode());
        AlikAssert.empty(vos, "已经存在此key的菜单，请更换key");
        record.setIsLeaf(1);
        // 如果不是1及菜单则给其父类目更新为非叶子节点
        if (!Long.valueOf(0).equals(record.getMenuParentId())) {
            MenuVO parent = menuManager.selectByPrimaryKey(record.getMenuParentId());
            parent.setIsLeaf(0);
            this.updateByPrimaryKeySelective(parent);
        }
        return menuManager.insert(record);
    }

    /**
     * Description ： 根据ID查询<br>
     * cyj
     * 
     * @return MenuVO
     */
    @Override
    public MenuVO selectByPrimaryKey(Long id) {
        return menuManager.selectByPrimaryKey(id);
    }

    /**
     * Description ： 更新菜单<br>
     * cyj
     */
    @Override
    public int updateByPrimaryKeySelective(Menu record) {
        List<MenuVO> vos = this.selectByMenuCode(record.getMenuCode());
        if (!CollectionUtils.isEmpty(vos)) {
            if (vos.size() > 1) {
                AlikAssert.isTrue(false, "已经存在此key的菜单，请更换key");
            } else if (!vos.get(0).getId().equals(record.getId())) {
                AlikAssert.isTrue(false, "已经存在此key的菜单，请更换key");
            }
        }
        return menuManager.updateByPrimaryKeySelective(record);
    }

    /**
     * Method Name : selectAllMenu<br>
     * Description : 这里记述method说明<br>
     * 
     * @return List<MenuVO>
     * 
     */
    @Override
    public List<MenuVO> selectAllMenu() {
        return menuManager.selectAllMenu();
    }

    /**
     * Description ：根据 menuCode查询菜单<br>
     * 
     * cyj
     * 
     * @return
     * @since
     * 
     */
    @Override
    public List<MenuVO> selectByMenuCode(String menuCode) {
        return menuManager.selectByMenuCode(menuCode);
    }

    /**
     * Description ： 根据菜单ids 查询所有菜单信息<br>
     * 
     * yangwb
     * 
     * @param ids
     * @return
     * @since
     * 
     */
    public List<MenuVO> findMenuVOSByIds(List<Long> ids) {
        return menuManager.findMenuVOSByIds(ids);
    }

    /**
     * Description ： 查询所有可用的菜单<br>
     * 
     * yangwb
     * 
     * @return
     * @since
     *
     */
    public List<MenuVO> findAllActiveMenuVOs() {
        return menuManager.findAllActiveMenuVOs();
    }
}
